--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / networkVisualiserWebGLEngine.test.js
Displaying Raw • Download
tests/frontend/networkVisualiserWebGLEngine.test.js e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 20.04 KB
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEachTb4b4b4, Te6edf3vi Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3graphToSceneRequestTb4b4b4,
Te6edf3isVisualiserWebGLSceneReadyTb4b4b4,
Te6edf3KIND_METb4b4b4,
Te6edf3KIND_IFACE_ONTb4b4b4,
Te6edf3KIND_IFACE_OFFTb4b4b4,
Te6edf3KIND_PEERTb4b4b4,
Te6edf3KIND_DISCOVEREDTb4b4b4,
Te6edf3pointerDistanceTb4b4b4,
Te6edf3pointerMidpointTb4b4b4,
Te6edf3canUseVisualiserWebGLTb4b4b4,
Te6edf3createVisualiserWebGLEngineTb4b4b4,
Te6edf3collectWebGLLabelsTb4b4b4,
Te6edf3truncateWebGLLabelTb4b4b4,
Te6edf3WEBGL_LABEL_MAX_CHARSTb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"@/js/networkVisualiserWebGLEngine.js"Tb4b4b4;
Tff7b72import Tb4b4b4{
Te6edf3atlasUvForSlotTb4b4b4,
Te6edf3mergeSceneNodesWithTexturesTb4b4b4,
Te6edf3resolveVisualiserAssetUrlTb4b4b4,
Te6edf3SCENE_NODE_STRIDETb4b4b4,
Te6edf3NODE_STRIDETb4b4b4,
Te6edf3ATLAS_COLSTb4b4b4,
Te6edf3ATLAS_ROWSTb4b4b4,
Te6edf3tryCreateWebGL2ContextTb4b4b4,
Tb4b4b4} Tff7b72from Ta5d6ff"@/js/networkVisualiserWebGL.js"Tb4b4b4;
Tff7b72const Te6edf3SCENE_READY_FNS Tff7b72= Tb4b4b4[
Ta5d6ff"meshchatxVisualiserSceneSet"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserSceneGetDrawBuffers"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserSceneTick"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserScenePick"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserBuildPathGraph"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserBuildFullGraph"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserLayout"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserPathHashes"Tb4b4b4,
Ta5d6ff"meshchatxVisualiserDedupeIcons"Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tff7b72function Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3name Tff7b72of Te6edf3SCENE_READY_FNSTb4b4b4) Tb4b4b4{
Tff7b72delete Tffa657globalThisTb4b4b4[Te6edf3nameTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserScenePanByTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneZoomAtTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneDragStartTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneDragToTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneDragEndTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneResizeTb4b4b4;
Tff7b72delete Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneGetPositionsTb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3installSceneReadyStubsTb4b4b4(Te6edf3overrides Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3name Tff7b72of Te6edf3SCENE_READY_FNSTb4b4b4) Tb4b4b4{
Tffa657globalThisTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3overridesTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72|| Tb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72function Te6edf3stubGlTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3createShaderTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3shaderSourceTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3compileShaderTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3getShaderParameterTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72trueTb4b4b4,
Te6edf3getShaderInfoLogTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff""Tb4b4b4,
Te6edf3deleteShaderTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3createProgramTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3attachShaderTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3linkProgramTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3getProgramParameterTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72trueTb4b4b4,
Te6edf3getProgramInfoLogTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff""Tb4b4b4,
Te6edf3deleteProgramTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3createBufferTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3bindBufferTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3bufferDataTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3createVertexArrayTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3bindVertexArrayTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3enableVertexAttribArrayTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3vertexAttribPointerTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3vertexAttribDivisorTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3getUniformLocationTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3createTextureTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3bindTextureTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3texParameteriTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3texImage2DTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3texSubImage2DTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3generateMipmapTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3pixelStoreiTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3deleteTextureTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3deleteBufferTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3deleteVertexArrayTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3viewportTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clearColorTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3clearTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3enableTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3blendFuncTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3useProgramTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3uniform2fTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3uniform1fTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3uniform1iTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3activeTextureTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3drawArraysTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3drawArraysInstancedTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3lineWidthTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3TEXTURE_2DTff7b72: T79c0ff0x0de1Tb4b4b4,
Te6edf3TEXTURE0Tff7b72: T79c0ff0x84c0Tb4b4b4,
Te6edf3RGBATff7b72: T79c0ff0x1908Tb4b4b4,
Te6edf3UNSIGNED_BYTETff7b72: T79c0ff0x1401Tb4b4b4,
Te6edf3LINEARTff7b72: T79c0ff0x2601Tb4b4b4,
Te6edf3LINEAR_MIPMAP_LINEARTff7b72: T79c0ff0x2703Tb4b4b4,
Te6edf3CLAMP_TO_EDGETff7b72: T79c0ff0x812fTb4b4b4,
Te6edf3TEXTURE_MIN_FILTERTff7b72: T79c0ff0x2801Tb4b4b4,
Te6edf3TEXTURE_MAG_FILTERTff7b72: T79c0ff0x2800Tb4b4b4,
Te6edf3TEXTURE_WRAP_STff7b72: T79c0ff0x2802Tb4b4b4,
Te6edf3TEXTURE_WRAP_TTff7b72: T79c0ff0x2803Tb4b4b4,
Te6edf3UNPACK_FLIP_Y_WEBGLTff7b72: T79c0ff0x9240Tb4b4b4,
Te6edf3UNPACK_PREMULTIPLY_ALPHA_WEBGLTff7b72: T79c0ff0x9241Tb4b4b4,
Te6edf3COLOR_BUFFER_BITTff7b72: T79c0ff0x4000Tb4b4b4,
Te6edf3BLENDTff7b72: T79c0ff0x0be2Tb4b4b4,
Te6edf3SRC_ALPHATff7b72: T79c0ff0x0302Tb4b4b4,
Te6edf3ONE_MINUS_SRC_ALPHATff7b72: T79c0ff0x0303Tb4b4b4,
Te6edf3ARRAY_BUFFERTff7b72: T79c0ff0x8892Tb4b4b4,
Te6edf3STATIC_DRAWTff7b72: T79c0ff0x88e4Tb4b4b4,
Te6edf3DYNAMIC_DRAWTff7b72: T79c0ff0x88e8Tb4b4b4,
Te6edf3FLOATTff7b72: T79c0ff0x1406Tb4b4b4,
Te6edf3TRIANGLESTff7b72: T79c0ff0x0004Tb4b4b4,
Te6edf3LINESTff7b72: T79c0ff0x0001Tb4b4b4,
Te6edf3VERTEX_SHADERTff7b72: T79c0ff0x8b31Tb4b4b4,
Te6edf3FRAGMENT_SHADERTff7b72: T79c0ff0x8b30Tb4b4b4,
Te6edf3COMPILE_STATUSTff7b72: T79c0ff0x8b81Tb4b4b4,
Te6edf3LINK_STATUSTff7b72: T79c0ff0x8b82Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3makeCanvasTb4b4b4(Te6edf3glTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3host Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"div"Tb4b4b4)Tb4b4b4;
Te6edf3hostTb4b4b4.Te6edf3styleTb4b4b4.Te6edf3cssText Tff7b72= Ta5d6ff"position:relative;width:400px;height:300px;"Tb4b4b4;
Tff7b72const Te6edf3canvas Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"canvas"Tb4b4b4)Tb4b4b4;
Te6edf3hostTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3canvasTb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3hostTb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3canvasTb4b4b4, Ta5d6ff"clientWidth"Tb4b4b4, Tb4b4b4{ Te6edf3valueTff7b72: T79c0ff400 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3canvasTb4b4b4, Ta5d6ff"clientHeight"Tb4b4b4, Tb4b4b4{ Te6edf3valueTff7b72: T79c0ff300 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3getBoundingClientRect Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3leftTff7b72: T79c0ff10Tb4b4b4, Te6edf3topTff7b72: T79c0ff20Tb4b4b4, Te6edf3widthTff7b72: T79c0ff400Tb4b4b4, Te6edf3heightTff7b72: T79c0ff300 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3setPointerCapture Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3releasePointerCapture Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3HTMLCanvasElementTb4b4b4.Te6edf3prototypeTb4b4b4, Ta5d6ff"getContext"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tff7b72function Tb4b4b4(Te6edf3typeTb4b4b4, Te6edf3optsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72this Tff7b72=== Te6edf3canvas Tff7b72&& Te6edf3type Tff7b72=== Ta5d6ff"webgl2"Tb4b4b4) Tff7b72return Te6edf3glTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3type Tff7b72=== Ta5d6ff"2d"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3clearRectTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3drawImageTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3getImageDataTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tff7b72new Tffa657Uint8ClampedArrayTb4b4b4(T79c0ff128 Tff7b72* T79c0ff128 Tff7b72* T79c0ff4Tb4b4b4)Tb4b4b4.Te6edf3fillTb4b4b4(T79c0ff255Tb4b4b4)Tb4b4b4,
Te6edf3widthTff7b72: T79c0ff128Tb4b4b4,
Te6edf3heightTff7b72: T79c0ff128Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3putImageDataTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3saveTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3restoreTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3setTransformTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3strokeTextTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3fillTextTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3canvasTb4b4b4;
Tb4b4b4}
Te6edf3describeTb4b4b4(Ta5d6ff"networkVisualiserWebGLEngine"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3restoreAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"isVisualiserWebGLSceneReady requires scene exports"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3isVisualiserWebGLSceneReadyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3installSceneReadyStubsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isVisualiserWebGLSceneReadyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"canUseVisualiserWebGL is false without scene readiness"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3canUseVisualiserWebGLTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"truncateWebGLLabel caps long names"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3truncateWebGLLabelTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3truncateWebGLLabelTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3truncateWebGLLabelTb4b4b4(Ta5d6ff"short"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"short"Tb4b4b4)Tb4b4b4;
Tff7b72const Tff7b72long Tff7b72= Ta5d6ff"a"Tb4b4b4.Te6edf3repeatTb4b4b4(Te6edf3WEBGL_LABEL_MAX_CHARS Tff7b72+ T79c0ff10Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3truncateWebGLLabelTb4b4b4(Tff7b72longTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3WEBGL_LABEL_MAX_CHARSTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff"..."Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"collectWebGLLabels follows canvas LOD bands"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3nodes Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Tb4b4b4[
T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff50Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff10Tb4b4b4, T79c0ff20Tb4b4b4, T79c0ff25Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff30Tb4b4b4, T79c0ff40Tb4b4b4,
T79c0ff25Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3labelByIndex Tff7b72= Tb4b4b4[Ta5d6ff"Local"Tb4b4b4, Ta5d6ff"eth0"Tb4b4b4, Ta5d6ff"Alice"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3idByIndex Tff7b72= Tb4b4b4[Ta5d6ff"me"Tb4b4b4, Ta5d6ff"eth0"Tb4b4b4, Ta5d6ff"peer1"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3base Tff7b72= Tb4b4b4{ Te6edf3sceneCountTff7b72: T79c0ff3Tb4b4b4, Te6edf3nodesTb4b4b4, Te6edf3labelByIndexTb4b4b4, Te6edf3idByIndex Tb4b4b4}Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3collectWebGLLabelsTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3baseTb4b4b4, Te6edf3zoomTff7b72: T79c0ff0.1 Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3collectWebGLLabelsTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3baseTb4b4b4, Te6edf3zoomTff7b72: T79c0ff0.3 Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3lTb4b4b4) Tb4b4b4=> Te6edf3lTb4b4b4.Te6edf3textTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Ta5d6ff"Local"Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(
Te6edf3collectWebGLLabelsTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3baseTb4b4b4, Te6edf3zoomTff7b72: T79c0ff0.3Tb4b4b4, Te6edf3hoverIdTff7b72: Ta5d6ff"peer1" Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3lTb4b4b4) Tb4b4b4=> Te6edf3lTb4b4b4.Te6edf3textTb4b4b4)
Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4)
Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Ta5d6ff"Alice"Tb4b4b4, Ta5d6ff"Local"Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3high Tff7b72= Te6edf3collectWebGLLabelsTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3baseTb4b4b4, Te6edf3zoomTff7b72: T79c0ff0.8 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3highTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3lTb4b4b4) Tb4b4b4=> Te6edf3lTb4b4b4.Te6edf3textTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Ta5d6ff"Local"Tb4b4b4, Ta5d6ff"eth0"Tb4b4b4, Ta5d6ff"Alice"Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3highTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3fontSizeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3highTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3fontSizeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff11Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"graphToSceneRequest maps me/iface/peer colors and kinds"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3req Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(
Tb4b4b4[
Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"me"Tb4b4b4, Te6edf3groupTff7b72: Ta5d6ff"me"Tb4b4b4, Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0Tb4b4b4, Te6edf3sizeTff7b72: T79c0ff50Tb4b4b4, Te6edf3colorTff7b72: Tb4b4b4{ Te6edf3borderTff7b72: Ta5d6ff"#3b82f6" Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4{
Te6edf3idTff7b72: Ta5d6ff"Radio"Tb4b4b4,
Te6edf3groupTff7b72: Ta5d6ff"interface"Tb4b4b4,
Te6edf3xTff7b72: T79c0ff10Tb4b4b4,
Te6edf3yTff7b72: T79c0ff20Tb4b4b4,
Te6edf3sizeTff7b72: T79c0ff35Tb4b4b4,
Te6edf3imageTff7b72: Ta5d6ff"/assets/images/network-visualiser/interface_connected.png"Tb4b4b4,
Te6edf3colorTff7b72: Tb4b4b4{ Te6edf3borderTff7b72: Ta5d6ff"#10b981" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"abcd"Tb4b4b4, Te6edf3groupTff7b72: Ta5d6ff"announce"Tb4b4b4, Te6edf3xTff7b72: T79c0ff30Tb4b4b4, Te6edf3yTff7b72: T79c0ff40Tb4b4b4, Te6edf3sizeTff7b72: T79c0ff25Tb4b4b4, Te6edf3colorTff7b72: Tb4b4b4{ Te6edf3borderTff7b72: Ta5d6ff"#8b5cf6" Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4[Tb4b4b4{ Tff7b72fromTff7b72: Ta5d6ff"me"Tb4b4b4, Te6edf3toTff7b72: Ta5d6ff"Radio"Tb4b4b4, Te6edf3widthTff7b72: T79c0ff3Tb4b4b4, Te6edf3colorTff7b72: Tb4b4b4{ Te6edf3colorTff7b72: Ta5d6ff"#10b981"Tb4b4b4, Te6edf3opacityTff7b72: T79c0ff1 Tb4b4b4} Tb4b4b4}Tb4b4b4]Tb4b4b4,
Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff640Tb4b4b4, Te6edf3heightTff7b72: T79c0ff480Tb4b4b4, Te6edf3zoomTff7b72: T79c0ff1 Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3kindTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3KIND_METb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3fixedTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3kindTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3KIND_IFACE_ONTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4.Te6edf3kindTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3KIND_PEERTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3edgesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3edgesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Tff7b72fromTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"me"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3widthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff640Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"graphToSceneRequest keeps zoom 0 so Scene.Set can preserve camera"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3req Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff100Tb4b4b4, Te6edf3heightTff7b72: T79c0ff100Tb4b4b4, Te6edf3zoomTff7b72: T79c0ff0Tb4b4b4, Te6edf3camXTff7b72: T79c0ff12Tb4b4b4, Te6edf3camYTff7b72: Tff7b72-T79c0ff4 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3zoomTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3cam_xTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff12Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3cam_yTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72-T79c0ff4Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3def Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff100Tb4b4b4, Te6edf3heightTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3defTb4b4b4.Te6edf3zoomTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"graphToSceneRequest marks disconnected interfaces and discovered peers"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3req Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(
Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: Ta5d6ff"down"Tb4b4b4,
Te6edf3groupTff7b72: Ta5d6ff"interface"Tb4b4b4,
Te6edf3imageTff7b72: Ta5d6ff"/assets/images/network-visualiser/interface_disconnected.png"Tb4b4b4,
Te6edf3colorTff7b72: Tb4b4b4{ Te6edf3borderTff7b72: Ta5d6ff"#ef4444" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"disc"Tb4b4b4, Te6edf3groupTff7b72: Ta5d6ff"discovered"Tb4b4b4, Te6edf3colorTff7b72: Ta5d6ff"#a855f7" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff100Tb4b4b4, Te6edf3heightTff7b72: T79c0ff100Tb4b4b4, Te6edf3zoomTff7b72: T79c0ff1 Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3kindTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3KIND_IFACE_OFFTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3kindTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3KIND_DISCOVEREDTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3rTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff168 Tff7b72/ T79c0ff255Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"graphToSceneRequest skips incomplete edges and nodes"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3req Tff7b72= Te6edf3graphToSceneRequestTb4b4b4(
Tb4b4b4[Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"" Tb4b4b4}Tb4b4b4, Tb4b4b4{ Te6edf3groupTff7b72: Ta5d6ff"me" Tb4b4b4}Tb4b4b4, Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"ok"Tb4b4b4, Te6edf3xTff7b72: T79c0ff1Tb4b4b4, Te6edf3yTff7b72: T79c0ff2 Tb4b4b4}Tb4b4b4]Tb4b4b4,
Tb4b4b4[Tb4b4b4{ Tff7b72fromTff7b72: Ta5d6ff"a" Tb4b4b4}Tb4b4b4, Tb4b4b4{ Te6edf3toTff7b72: Ta5d6ff"b" Tb4b4b4}Tb4b4b4, Tb4b4b4{ Tff7b72fromTff7b72: Ta5d6ff"ok"Tb4b4b4, Te6edf3toTff7b72: Ta5d6ff"ok" Tb4b4b4}Tb4b4b4]Tb4b4b4,
Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff10Tb4b4b4, Te6edf3heightTff7b72: T79c0ff10 Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3nodesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"ok"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3edgesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3zoomTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"pointerDistance and midpoint support pinch zoom math"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3a Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3b Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff30Tb4b4b4, Te6edf3yTff7b72: T79c0ff40 Tb4b4b4}Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3pointerDistanceTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3pointerMidpointTb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3xTff7b72: T79c0ff15Tb4b4b4, Te6edf3yTff7b72: T79c0ff20 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"pinch zoom factor is distance ratio around midpoint"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3startA Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff100Tb4b4b4, Te6edf3yTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3startB Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff200Tb4b4b4, Te6edf3yTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3endA Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff80Tb4b4b4, Te6edf3yTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3endB Tff7b72= Tb4b4b4{ Te6edf3xTff7b72: T79c0ff220Tb4b4b4, Te6edf3yTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3startDist Tff7b72= Te6edf3pointerDistanceTb4b4b4(Te6edf3startATb4b4b4, Te6edf3startBTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3endDist Tff7b72= Te6edf3pointerDistanceTb4b4b4(Te6edf3endATb4b4b4, Te6edf3endBTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startDistTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3endDistTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff140Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3endDist Tff7b72/ Te6edf3startDistTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff1.4Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3pointerMidpointTb4b4b4(Te6edf3endATb4b4b4, Te6edf3endBTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3xTff7b72: T79c0ff150Tb4b4b4, Te6edf3yTff7b72: T79c0ff100 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"networkVisualiserWebGL textures"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3itTb4b4b4(Ta5d6ff"atlasUvForSlot maps grid cells"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3atlasUvForSlotTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3uTff7b72: T79c0ff0Tb4b4b4, Te6edf3vTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3atlasUvForSlotTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4.Te6edf3uTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff1 Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3atlasUvForSlotTb4b4b4(Te6edf3ATLAS_COLSTb4b4b4)Tb4b4b4.Te6edf3vTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff1 Tff7b72/ Te6edf3ATLAS_ROWSTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3last Tff7b72= Te6edf3atlasUvForSlotTb4b4b4(Te6edf3ATLAS_COLS Tff7b72* Te6edf3ATLAS_ROWS Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3lastTb4b4b4.Te6edf3uTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(Tb4b4b4(Te6edf3ATLAS_COLS Tff7b72- T79c0ff1Tb4b4b4) Tff7b72/ Te6edf3ATLAS_COLSTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3lastTb4b4b4.Te6edf3vTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(Tb4b4b4(Te6edf3ATLAS_ROWS Tff7b72- T79c0ff1Tb4b4b4) Tff7b72/ Te6edf3ATLAS_ROWSTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"resolveVisualiserAssetUrl keeps blob/data/http URLs"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3resolveVisualiserAssetUrlTb4b4b4(Ta5d6ff"blob:http://localhost/x"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"blob:http://localhost/x"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3resolveVisualiserAssetUrlTb4b4b4(Ta5d6ff"data:image/png;base64,xx"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"data:image/png;base64,xx"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3resolveVisualiserAssetUrlTb4b4b4(Ta5d6ff"https://example.com/a.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"https://example.com/a.png"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"resolveVisualiserAssetUrl absolutizes root paths"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3origin Tff7b72= Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3resolveVisualiserAssetUrlTb4b4b4(Ta5d6ff"/assets/images/reticulum_logo_512.png"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(
Ta5d6ff`Tffd700${Te6edf3originTffd700}Ta5d6ff/assets/images/reticulum_logo_512.pngTa5d6ff`
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"mergeSceneNodesWithTextures attaches atlas UVs"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3scene Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3SCENE_NODE_STRIDETb4b4b4)Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= T79c0ff2Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= T79c0ff10Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= T79c0ff0.1Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff4Tb4b4b4] Tff7b72= T79c0ff0.2Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72= T79c0ff0.3Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff6Tb4b4b4] Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff7Tb4b4b4] Tff7b72= T79c0ff3Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Te6edf3sceneTb4b4b4, Tb4b4b4[Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff1Tb4b4b4, Te6edf3uTff7b72: T79c0ff0.25Tb4b4b4, Te6edf3vTff7b72: T79c0ff0.5 Tb4b4b4}Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3NODE_STRIDETb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff8Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0.25Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff9Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0.5Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"mergeSceneNodesWithTextures falls back to untextured discs"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3scene Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3SCENE_NODE_STRIDETb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Te6edf3sceneTb4b4b4, Tb4b4b4[Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff0Tb4b4b4, Te6edf3uTff7b72: T79c0ff0Tb4b4b4, Te6edf3vTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"mergeSceneNodesWithTextures handles multiple nodes and reuses scratch"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3scene Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3SCENE_NODE_STRIDE Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3sceneTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3sceneTb4b4b4[Te6edf3SCENE_NODE_STRIDETb4b4b4] Tff7b72= T79c0ff5Tb4b4b4;
Tff7b72const Te6edf3scratch Tff7b72= Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3NODE_STRIDE Tff7b72* T79c0ff4Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3meta Tff7b72= Tb4b4b4[
Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff1Tb4b4b4, Te6edf3uTff7b72: T79c0ff0.1Tb4b4b4, Te6edf3vTff7b72: T79c0ff0.2 Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3useTexTff7b72: T79c0ff0Tb4b4b4, Te6edf3uTff7b72: T79c0ff0Tb4b4b4, Te6edf3vTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3out Tff7b72= Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Te6edf3sceneTb4b4b4, Te6edf3metaTb4b4b4, Te6edf3scratchTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3NODE_STRIDE Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4.Te6edf3bufferTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3scratchTb4b4b4.Te6edf3bufferTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[Te6edf3NODE_STRIDETb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff5Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3outTb4b4b4[Te6edf3NODE_STRIDE Tff7b72+ T79c0ff7Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"mergeSceneNodesWithTextures tolerates empty input"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Tff7b72nullTb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3mergeSceneNodesWithTexturesTb4b4b4(Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"tryCreateWebGL2Context returns null for invalid canvas"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3tryCreateWebGL2ContextTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3tryCreateWebGL2ContextTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"createVisualiserWebGLEngine interactions"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3engineTb4b4b4;
Tff7b72let Te6edf3canvasTb4b4b4;
Tff7b72let Te6edf3glTb4b4b4;
Tff7b72let Te6edf3zoomAtTb4b4b4;
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3zoomAt Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3gl Tff7b72= Te6edf3stubGlTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3installSceneReadyStubsTb4b4b4(Tb4b4b4{
Te6edf3meshchatxVisualiserSceneSetTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3okTff7b72: Tff7b72trueTb4b4b4, Te6edf3nodesTff7b72: T79c0ff2Tb4b4b4, Te6edf3edgesTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3meshchatxVisualiserSceneGetDrawBuffersTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3okTff7b72: Tff7b72trueTb4b4b4,
Te6edf3nodesTff7b72: Tff7b72new Tffa657Float32ArrayTb4b4b4(Te6edf3SCENE_NODE_STRIDE Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4,
Te6edf3edgesTff7b72: Tff7b72new Tffa657Float32ArrayTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3camXTff7b72: T79c0ff0Tb4b4b4,
Te6edf3camYTff7b72: T79c0ff0Tb4b4b4,
Te6edf3zoomTff7b72: T79c0ff1Tb4b4b4,
Te6edf3nodeCountTff7b72: T79c0ff2Tb4b4b4,
Te6edf3edgeCountTff7b72: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3meshchatxVisualiserScenePickTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneZoomAt Tff7b72= Tb4b4b4(Tb4b4b4...Te6edf3argsTb4b4b4) Tb4b4b4=> Te6edf3zoomAtTb4b4b4(Tb4b4b4...Te6edf3argsTb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserScenePanBy Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneGetPositions Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3positionsTff7b72: Tb4b4b4{ Te6edf3meTff7b72: Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneResize Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3canvas Tff7b72= Te6edf3makeCanvasTb4b4b4(Te6edf3glTb4b4b4)Tb4b4b4;
Te6edf3engine Tff7b72= Te6edf3createVisualiserWebGLEngineTb4b4b4(Te6edf3canvasTb4b4b4, Tb4b4b4{
Te6edf3getLiveLayoutTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72falseTb4b4b4,
Te6edf3isDarkTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3engineTb4b4b4) Tb4b4b4{
Te6edf3engineTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3engine Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3canvasTff7b72?Tb4b4b4.Te6edf3parentElementTff7b72?Tb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3restoreAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"throws without WASM scene readiness"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3engineTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3engine Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3clearSceneGlobalsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3c Tff7b72= Te6edf3makeCanvasTb4b4b4(Te6edf3stubGlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3createVisualiserWebGLEngineTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toThrowTb4b4b4(Ta5d6ff/WASM scene unavailable/Tb4b4b4)Tb4b4b4;
Te6edf3cTb4b4b4.Te6edf3parentElementTff7b72?Tb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"pinch gesture calls SceneZoomAt with distance ratio"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3fire Tff7b72= Tb4b4b4(Te6edf3typeTb4b4b4, Te6edf3propsTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ev Tff7b72= Tff7b72new Te6edf3EventTb4b4b4(Te6edf3typeTb4b4b4, Tb4b4b4{ Te6edf3bubblesTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3evTb4b4b4, Te6edf3propsTb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3dispatchEventTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
T8b949e// css = client - rect.left/top => 110-10=100, 120-20=100
Te6edf3fireTb4b4b4(Ta5d6ff"pointerdown"Tb4b4b4, Tb4b4b4{ Te6edf3pointerIdTff7b72: T79c0ff1Tb4b4b4, Te6edf3pointerTypeTff7b72: Ta5d6ff"touch"Tb4b4b4, Te6edf3buttonTff7b72: T79c0ff0Tb4b4b4, Te6edf3clientXTff7b72: T79c0ff110Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff120 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3fireTb4b4b4(Ta5d6ff"pointerdown"Tb4b4b4, Tb4b4b4{ Te6edf3pointerIdTff7b72: T79c0ff2Tb4b4b4, Te6edf3pointerTypeTff7b72: Ta5d6ff"touch"Tb4b4b4, Te6edf3buttonTff7b72: T79c0ff0Tb4b4b4, Te6edf3clientXTff7b72: T79c0ff210Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff120 Tb4b4b4}Tb4b4b4)Tb4b4b4;
T8b949e// dist 100 -> 140 (css x 100 and 240), mid css (170, 100)
Te6edf3fireTb4b4b4(Ta5d6ff"pointermove"Tb4b4b4, Tb4b4b4{ Te6edf3pointerIdTff7b72: T79c0ff2Tb4b4b4, Te6edf3pointerTypeTff7b72: Ta5d6ff"touch"Tb4b4b4, Te6edf3buttonTff7b72: T79c0ff0Tb4b4b4, Te6edf3clientXTff7b72: T79c0ff250Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff120 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3zoomAtTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Tb4b4b4[Te6edf3sxTb4b4b4, Te6edf3syTb4b4b4, Te6edf3factorTb4b4b4] Tff7b72= Te6edf3zoomAtTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3atTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3factorTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff1.4Tb4b4b4, T79c0ff5Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sxTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff170Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3syTb4b4b4)Tb4b4b4.Te6edf3toBeCloseToTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserScenePanByTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"wheel zoom calls SceneZoomAt"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3ev Tff7b72= Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"wheel"Tb4b4b4, Tb4b4b4{ Te6edf3bubblesTff7b72: Tff7b72trueTb4b4b4, Te6edf3cancelableTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3evTb4b4b4, Tb4b4b4{ Te6edf3clientXTff7b72: T79c0ff60Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff80Tb4b4b4, Te6edf3deltaYTff7b72: Tff7b72-T79c0ff100 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3canvasTb4b4b4.Te6edf3dispatchEventTb4b4b4(Te6edf3evTb4b4b4)Tb4b4b4;
T8b949e// css: 60-10=50, 80-20=60
Te6edf3expectTb4b4b4(Te6edf3zoomAtTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(T79c0ff50Tb4b4b4, T79c0ff60Tb4b4b4, T79c0ff1.12Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"setGraph and updateNodeImages upload icon textures"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3bitmap Tff7b72= Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff32Tb4b4b4, Te6edf3heightTff7b72: T79c0ff32Tb4b4b4, Te6edf3closeTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(
Ta5d6ff"fetch"Tb4b4b4,
Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3okTff7b72: Tff7b72trueTb4b4b4,
Te6edf3blobTff7b72: Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Tff7b72new Tffa657Uint8ArrayTb4b4b4(Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(
Ta5d6ff"createImageBitmap"Tb4b4b4,
Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3bitmapTb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3engineTb4b4b4.Te6edf3setGraphTb4b4b4(
Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: Ta5d6ff"me"Tb4b4b4,
Te6edf3groupTff7b72: Ta5d6ff"me"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Local"Tb4b4b4,
Te6edf3imageTff7b72: Ta5d6ff"/assets/images/reticulum_logo_512.png"Tb4b4b4,
Te6edf3xTff7b72: T79c0ff0Tb4b4b4,
Te6edf3yTff7b72: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4{
Te6edf3idTff7b72: Ta5d6ff"peer"Tb4b4b4,
Te6edf3groupTff7b72: Ta5d6ff"announce"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Peer"Tb4b4b4,
Te6edf3imageTff7b72: Ta5d6ff"/assets/images/network-visualiser/user.png"Tb4b4b4,
Te6edf3xTff7b72: T79c0ff10Tb4b4b4,
Te6edf3yTff7b72: T79c0ff10Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4{ Te6edf3preserveCameraTff7b72: Tff7b72falseTb4b4b4, Te6edf3zoomTff7b72: T79c0ff1 Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3engineTb4b4b4.Te6edf3getCountsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3nodesTff7b72: T79c0ff2Tb4b4b4, Te6edf3edgesTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3engineTb4b4b4.Te6edf3getPositionsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3meTff7b72: Tb4b4b4{ Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3glTb4b4b4.Te6edf3texSubImage2DTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3uploadsBefore Tff7b72= Te6edf3glTb4b4b4.Te6edf3texSubImage2DTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3engineTb4b4b4.Te6edf3updateNodeImagesTb4b4b4(Tb4b4b4[Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"peer"Tb4b4b4, Te6edf3imageTff7b72: Ta5d6ff"blob:custom-icon" Tb4b4b4}Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3glTb4b4b4.Te6edf3texSubImage2DTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(Te6edf3uploadsBeforeTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"setGraph applies kind default icons when image missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(
Ta5d6ff"fetch"Tb4b4b4,
Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3okTff7b72: Tff7b72trueTb4b4b4,
Te6edf3blobTff7b72: Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Tff7b72new Tffa657Uint8ArrayTb4b4b4(Tb4b4b4[T79c0ff9Tb4b4b4]Tb4b4b4)Tb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"image/png" Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3stubGlobalTb4b4b4(
Ta5d6ff"createImageBitmap"Tb4b4b4,
Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3widthTff7b72: T79c0ff16Tb4b4b4, Te6edf3heightTff7b72: T79c0ff16Tb4b4b4, Te6edf3closeTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3engineTb4b4b4.Te6edf3setGraphTb4b4b4(Tb4b4b4[Tb4b4b4{ Te6edf3idTff7b72: Ta5d6ff"me"Tb4b4b4, Te6edf3groupTff7b72: Ta5d6ff"me"Tb4b4b4, Te6edf3labelTff7b72: Ta5d6ff"Me"Tb4b4b4, Te6edf3xTff7b72: T79c0ff0Tb4b4b4, Te6edf3yTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4]Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4, Tb4b4b4{
Te6edf3preserveCameraTff7b72: Tff7b72falseTb4b4b4,
Te6edf3zoomTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3viTb4b4b4.Te6edf3waitForTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Tffa657globalThisTb4b4b4.Te6edf3fetchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657StringTb4b4b4(Tffa657globalThisTb4b4b4.Te6edf3fetchTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"reticulum_logo_512.png"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"sets touch-action none for mobile gestures"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3styleTb4b4b4.Te6edf3touchActionTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"none"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────